influxdb 中用正确的姿势删除measurement

influxdb 中用正确的姿势删除measurement

删除measurement的语法是:

1
drop measurement <measurement_name>

但是我在删除某一张表的时候,发现 influxDB 的所有表查询都非常慢,写入基本上失败率在90%以上

查看 influxdb 所在的操作系统 CPU 使用率才仅仅是7%左右,而且不会有波动,其他slave 节点的 CPU 使用率确还是正常的,基本上都在100%以上走(我的机器是20核的,另外我的业务对整个 influxdb请求的 TPS 基本上保持在500TPS),接下来查询是越来越慢,写入基本上都是失败的,主节点的 CPU 使用率还是7%,等了十多分钟还是没有改观,没有办法,我强制kill了 influxdb的进程.

重启后发现卡住的那一段时间内的数据很不正常,呈间歇性数据丢失的样子,由于项目进度的原因,我并没有深究,但是第二次又遇到需要删除measurement的时候还是出现了上面描述的现象,当然付出的代价是数据丢失.

我猜想是因为表里面的数据太多,删除的时候需要在集群之间同步,导致数据锁定(也不一定是死锁,就是数据没锁定掉了,这也可能导致写入失败),所以我在 drop measurement 之前先删除所有的 tag,用下面的语句

1
DROP SERIES FROM 'measurement_name'

如果数据量再大点的话,你可以一部分一部分的删除,否则也会触发上面所说的锁定

等所有的数据都删干净了,再删除表,基本上都是马上完成的.

最后说一下,虽然没有看源码,但是 influxdb 的删除应该也是事务性的,所以可能导致对单张表的写操作全部被锁定,一直到表被删除后再重新创建,同时还会影响其他表的查询操作.也不一定说得对,但至少从表现来看,现象就是这样的,业务希望以后大家用正确的姿势来删除表.

坚持原创技术分享,您的支持将鼓励我继续创作!